package com.ruoyi.video.service;

import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.domain.video.VideoDir;

import java.util.List;

/**
 * 部门管理 服务层
 * 
 * @author ruoyi
 */
public interface IVideoDirService
{
    /**
     * 查询部门管理数据
     * 
     * @param dir 部门信息
     * @return 部门信息集合
     */
    public List<VideoDir> selectDirList(VideoDir dir);

    /**
     * 查询部门树结构信息
     * 
     * @param dir 部门信息
     * @return 部门树信息集合
     */
    public List<TreeSelect> selectDirTreeList(VideoDir dir);

    /**
     * 构建前端所需要树结构
     * 
     * @param dirs 部门列表
     * @return 树结构列表
     */
    public List<VideoDir> buildDirTree(List<VideoDir> dirs);

    /**
     * 构建前端所需要下拉树结构
     * 
     * @param dirs 部门列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildDirTreeSelect(List<VideoDir> dirs);

    /**
     * 根据部门ID查询信息
     * 
     * @param dirId 部门ID
     * @return 部门信息
     */
    public VideoDir selectDirById(Long dirId);

    /**
     * 是否存在部门子节点
     * 
     * @param dirId 部门ID
     * @return 结果
     */
    public boolean hasChildByDirId(Long dirId);


    /**
     * 校验部门名称是否唯一
     * 
     * @param dir 部门信息
     * @return 结果
     */
    public boolean checkDirNameUnique(VideoDir dir);

    /**
     * 校验部门是否有数据权限
     * 
     * @param dirId 部门id
     */
    public void checkDirDataScope(Long dirId);

    /**
     * 新增保存部门信息
     * 
     * @param dir 部门信息
     * @return 结果
     */
    public int insertDir(VideoDir dir);

    /**
     * 修改保存部门信息
     * 
     * @param dir 部门信息
     * @return 结果
     */
    public int updateDir(VideoDir dir);

    /**
     * 删除部门管理信息
     * 
     * @param dirId 部门ID
     * @return 结果
     */
    public int deleteDirById(Long dirId);
}
